package cn.icatw.gulimall.cart.service;

import cn.icatw.gulimall.cart.vo.CartItemVo;
import cn.icatw.gulimall.cart.vo.CartVo;

import java.util.List;
import java.util.concurrent.ExecutionException;

/**
 * 车服务
 *
 * @author icatw
 * @date 2022/3/23
 * @email 762188827@qq.com
 * @apiNote
 */
public interface CartService {
    /**
     * 添加到购物车
     *
     * @param skuId sku id
     * @param num   商品数量
     * @return {@link CartItemVo}
     * @throws ExecutionException   执行异常
     * @throws InterruptedException 中断异常
     */
    CartItemVo addToCart(Long skuId, Integer num) throws ExecutionException, InterruptedException;

    /**
     * 获取购物车中某个购物项数据
     *
     * @param skuId sku id
     * @return {@link CartItemVo}
     */
    CartItemVo getCartItem(Long skuId);

    /**
     *
     * 获取购物车数据用于页面展示
     *
     * @return {@link CartVo}
     * @throws ExecutionException   执行异常
     * @throws InterruptedException 中断异常
     */
    CartVo getCart() throws ExecutionException, InterruptedException;

    /**
     * 清空购物车
     *
     * @param cartKey 购物车key（用户购物车/临时购物车）
     */
    void clearCart(String cartKey);

    /**
     * 勾选购物项，改变选中状态
     *
     * @param skuId sku id
     * @param check 检查
     */
    void checkItem(Long skuId, Integer check);

    /**
     * 改变购物项数量
     *
     * @param skuId sku id
     * @param num   全国矿工工会
     */
    void countItem(Long skuId, Integer num);

    /**
     * 删除项目
     *
     * @param deleteId 删除id
     */
    void deleteItem(Long deleteId);

    /**
     * 获得当前用户购物车物品
     *
     * @return {@link List}<{@link CartItemVo}>
     */
    List<CartItemVo> getCurrentUserCartItems();

}
